/**
 * http请求方式: POST
 * https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN
 */
package cn.rengy.tpa.wxmp.message;

import java.util.List;

import org.apache.commons.lang3.StringUtils;

import com.alibaba.fastjson.JSONObject;

import cn.rengy.tool.http.HttpUtils;
import cn.rengy.tpa.wxmp.event.MsgType;

/**
 * 群发消息 订阅号提供了每天1条的群发权限 为服务号提供每月（自然月）4条的群发权限 企业号无限制
 * 
 * @author rengy
 */
public class MassMsg {
	// 根据分组进行群发【订阅号与服务号认证后均可用】
	private static final String MSG_URL2 = "https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token=";
	// 根据OpenID列表群发【订阅号不可用，服务号认证后可用】
	private static final String MSG_URL = "https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token=";
	// private String accessToken;
	private String msgType; // msgtype
	private String msgBody; // 发送的消息post数据
	private String accessToken;
	public MassMsg(String token) {
		this.accessToken = token;
	}
	/**
	 * 发送客服消息
	 * @param msgBody
	 */
	private void send() {
		// 需要判断一下，防止上面刷新token失败
		if (StringUtils.isNotBlank(accessToken)) {
			String url = MSG_URL + accessToken;
			HttpUtils.post(url, msgBody);
		}
	}

	/**
	 * 发送客服消息
	 * 
	 * @param msgBody
	 */
	private void sendAll() {
		// 需要判断一下，防止上面刷新token失败
		if (StringUtils.isNotBlank(accessToken)) {
			String url = MSG_URL2 + accessToken;
			HttpUtils.post(url, msgBody);
		}
	}

	/**
	 * 指定多个userid发送，userList必须>=2
	 * 
	 * @param userList
	 * @param content
	 */
	public void sendText(List<String> userList, String content) {
		this.msgType = MsgType.text.name();
		JSONObject jsonMsg = new JSONObject();
		jsonMsg.put("content", content);
		JSONObject json = new JSONObject();
		json.put("touser", JSONObject.toJSON(userList));
		json.put("msgtype", this.msgType);
		json.put("text", jsonMsg);
		this.msgBody = json.toJSONString();
		send();
	}

	/**
	 * 群发所有关注者
	 * 
	 * @param content
	 */
	public void sendAll(String content) {
		this.msgType = MsgType.text.name();
		JSONObject jsonMsg = new JSONObject();
		jsonMsg.put("content", content);
		JSONObject json = new JSONObject();
		json.put("msgtype", this.msgType);
		json.put("text", jsonMsg);
		json.put("is_to_all", true);
		this.msgBody = json.toJSONString();
		sendAll();
	}

}
